/*************************************************************************
	> File Name: 001.HZOJ329.cpp
	> Author: Maureen 
	> Mail: Maureen@qq.com 
	> Created Time: 一  2/22 16:24:55 2021
 ************************************************************************/

/**
 *题目描述
给定长度为𝑁 (𝑁 ≤ 100000)的序列𝐴 (0 ≤ 𝐴𝑖≤ 100000)，然后输入𝑚 (𝑚 ≤ 10^5) 行操作指令

第一类指令形如𝐶 𝑙 𝑟 𝑑 (1≤𝑙≤𝑟≤𝑁)，表示把数列中第𝑙...𝑟之间的数都加𝑑(0≤𝑑≤100000)
第二类指令形如𝑄 𝑥(𝑥≤𝑁)，表示询问序列中第𝑥个数的值。

输入
第一行一个整数𝑁,代表序列𝐴的长度

第二行是由空格分隔开的𝑁个数，分别代表𝐴1，𝐴2……𝐴𝑛
接下来一行是一个整数𝑚，代表操作的次数。

接下来𝑚 行，每行代表这一条指令如题目所述

输出
对于每次𝑄 查询，输出一行为查询的值。
 *
 */
 
 /*
  * 分析：在原数组上[l, r] 区间上每个元素+d，相当于在差分数组上 l 处+d，r + 1处-d。
  * 查询原数组中 x 位置的值，相当于求差分数组的前缀和
  * 总体思路：将原数组转换为差分数组，修改区间内的值就转换为差分数组的单点修改；查询原数组中的值就相当于求差分数组的前缀和。
  * 树状数组维护的是原数组的差分数组。
  */

#include <iostream>
using namespace std;

#define lowbit(x) (x & -x)
#define MAX_N 100000
int c[MAX_N + 5]; 

void add(int i, int x, int n) {
    while (i <= n) {
        c[i] += x;
        i += lowbit(i);
    }
    return ;
}

int query(int i) {
    int sum = 0;
    while (i) {
        sum += c[i];
        i -= lowbit(i);
    }
    return sum;
}

int main() {
    int m, n, pre = 0, a;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a;
        add(i, a - pre, n); //获取差分数组
        pre = a;
    }
    cin >> m;
    char s[10];
    int l, r, x;
    for (int i = 0; i < m; i++) {
        cin >> s;
        switch (s[0]) {
            case 'C': {
                cin >> l >> r >> x;
                add(l, x, n);
                add(r + 1, -x, n);
            } break;
            case 'Q': {
                cin >> x;
                cout << query(x) << endl;
            } break;
        }
    }
    return 0;
}
